package com.zy.ioc.pro2_ioc;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.ThreadPoolExecutor;

@Configuration
public class AppConfig {

    @Bean  //利用@Bean注解，将方法的返回值作为Bean对象，交给Spring容器管理   <bean id="product" class="com.zy.pro2_ioc.Product"/>
    public Product product() {
        return new Product();
    }

    //@Bean 这种方式 主要是用于第三方类库，第三方类库中没有@Component注解，但是我们又想将第三方类库中的类交给Spring容器管理

    //需求一: 创建一个线程池对象，交给Spring容器管理, 这个对象所属的类它是第三方类库提供的
    @Bean
    public ThreadPoolExecutor tpe() {
        return new ThreadPoolExecutor(10, 20, 30, java.util.concurrent.TimeUnit.SECONDS, new java.util.concurrent.ArrayBlockingQueue<>(100));
    }

    //需求二: 创建一个数据库联接池对象，交给Spring容器管理, 这个对象所属的类它是第三方类库提供的
    @Bean
    public DruidDataSource ds() {
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl("jdbc:mysql://localhost:3306/bank");
        ds.setUsername("root");
        ds.setPassword("aaaa");

        ds.setInitialSize(  5 );  //初始化连接池的大小
        ds.setMaxActive(  20 );    //最大连接池的大小
        ds.setMinIdle(  5 );       //最小连接池的大小
        return ds;
    }


}
